#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
autor: joão pedro brites raposo alexandre
data criação: 2011/11/24
linguagem: python
modulo: plotlib
versão: v1.0
'''

import csv
import time
import sqlite3
import matplotlib.pyplot as plt
import pylab

#class to operate width plot files
class Plot:

    #class contructor
    def __init__(self):
        pass

    #-----------------------------------------------------------------
    #metodo para criar grafico 1
    #-----------------------------------------------------------------    
    def create_plot_file_from_data_search_1(self, db_file):

        #try:
        print 'gráfico (total de professores por estabelecimento por ano)...'
        print 'criando gráfico...'
        t1 = time.clock()

        #ligacao a base de dados
        conexao = sqlite3.connect(db_file)
        c = conexao.cursor()
        cmd = '''SELECT DISTINCT(tipo_estabelecimento) FROM docentes
                    ORDER BY tipo_estabelecimento'''
        c.execute(cmd)
        tipo_estab_list = c.fetchall()
        
        #inicializacao lista total
        info_total = []

        for i in tipo_estab_list:
            #print 'estabelecimento',  i[0]
            #inicializacao lista anual
            data = []
            for year in range(2000,2011):
                #print 'ano:', year
                estabelecimento = i[0].encode('utf-8')
                cmd = '''SELECT COUNT(nome) FROM docentes
                            WHERE tipo_estabelecimento == '{0}'
                            AND ano_lectivo == {1}'''.format(estabelecimento, year)
                c.execute(cmd)
                information = c.fetchall()

                #recolher informacao para lista
                for x in information:
                    data.append(x[0])
                    pass                
                pass

            #lista de listas - tipo de estabelecimentos com informacao de 2000 a 2011
            info_total.append(data)         
            pass

        conexao.commit()
        conexao.close()

        ident = 0
        #ciclo para construcao do grafico
        for valor in info_total:
            label_label = str(tipo_estab_list[ident])
            plt.plot(valor, linewidth=1.0, marker='o', label=label_label)
            ident += 1
            pass
        
        #atributos do grafico e da legenda
        pylab.legend(loc="upper right", mode="expand", bbox_to_anchor=(1, 1))
        pylab.savefig('grafico_1.png')        
        plt.ylabel('valores')
        plt.xlabel('ano 2000 a 2010')
        plt.grid(True)
        plt.title(u'Total de Professores por Instituição por ano')
        plt.show()

        t2 = time.clock()
        print 'tempo =', t2-t1
        print 'gráfico ok.'
            
        #except:
            #print 'base de dados não encontrada'
            #pass 


    #-----------------------------------------------------------------
    #metodo para criar grafico 2
    #-----------------------------------------------------------------    
    def create_plot_file_from_data_search_2(self, estabelecimento, db_file):

        #try:
            
        print 'gráfico (total de professores por categoria por estabelecimento por ano)...'
        print 'criando gráfico...'
        t1 = time.clock()

        #ligacao a base de dados
        conexao = sqlite3.connect(db_file)
        c = conexao.cursor()
        cmd = '''SELECT DISTINCT(categoria) FROM docentes
                    WHERE tipo_estabelecimento == "{0}"'''.format(estabelecimento)
        c.execute(cmd)
        tipo_categoria_list = c.fetchall()
        
        #inicializacao lista total
        info_total = []

        for i in tipo_categoria_list:
            #inicializacao lista anual
            data = []
            for year in range(2000,2011):
                categoria = i[0].encode('utf-8')
                cmd = '''SELECT COUNT(nome) FROM docentes
                            WHERE tipo_estabelecimento == '{0}'
                            AND categoria == '{1}'
                            AND ano_lectivo == {2}'''.format(estabelecimento, categoria, year)
                c.execute(cmd)
                information = c.fetchall()

                #recolher informacao para lista
                for x in information:
                    data.append(x[0])
                    pass                
                pass

            #lista de listas - tipo de estabelecimentos marker='o'com informacao de 2000 a 2011
            info_total.append(data)
        
        conexao.commit()
        conexao.close()

        ident = 0
        #ciclo para construcao do grafico
        for valor in info_total:
            label_label = str(tipo_categoria_list[ident])
            plt.plot(valor, linewidth=1.0, marker='o', label=label_label)
            ident += 1
            pass
        
        #atributos do grafico e da legenda
        pylab.legend(loc="upper right", mode="expand", bbox_to_anchor=(1, 1))
        pylab.savefig('grafico_2.png')        
        plt.ylabel('valores')
        plt.xlabel('ano 2000 a 2010')
        plt.grid(True)
        plt.title(u'Total de Professores por Categoria por Instituição por ano')
        plt.show()

        t2 = time.clock()
        print 'tempo =', t2-t1
        print 'gráfico ok.'
        
        #except:
            #print 'base de dados não encontrada'
            #pass 


    #-----------------------------------------------------------------
    #metodo para criar grafico 3
    #----------------------------------------------------------------- 
    def create_plot_file_from_data_search_3(self, estabelecimento, db_file):

        print 'gráfico (total de professores por grau por estabelecimento por ano)...'
        print 'criando gráfico...'
        t1 = time.clock()

        #ligacao a base de dados
        conexao = sqlite3.connect(db_file)
        c = conexao.cursor()
        cmd = '''SELECT DISTINCT(ultimo_grau) FROM docentes
                    WHERE tipo_estabelecimento =="{0}"'''.format(estabelecimento)
        c.execute(cmd)
        tipo_grau_list = c.fetchall()
        
        #inicializacao lista total
        info_total = []

        #print len(tipo_grau_list)
        z = 0
        try:
            for i in tipo_grau_list:
                #print i[0]
                #inicializacao lista anual
                data = []
                for year in range(2000,2011):
                    #print year
                    grau = i[0].encode('utf-8')
                    cmd = '''SELECT COUNT(nome) FROM docentes
                                WHERE ultimo_grau == '{0}'
                                AND ano_lectivo == {1}'''.format(grau, year)
                    c.execute(cmd)
                    information = c.fetchall()
                    #print information

                    #recolher informacao para lista
                    for x in information:
                        data.append(x[0])
                        pass                
                    pass

                #lista de listas - tipo de estabelecimentos com informacao de 2000 a 2011
                info_total.append(data)         
                pass
        except:
            pass

        conexao.commit()
        conexao.close()

        ident = 0
        #ciclo para construcao do grafico
        for valor in info_total:
            label_label = str(tipo_grau_list[ident])
            plt.plot(valor, linewidth=1.0, marker='o', label=label_label)
            ident += 1
            pass
        
        #atributos do grafico e da legenda
        pylab.legend(loc="upper right", mode="expand", bbox_to_anchor=(1, 1))
        pylab.savefig('grafico_3.png')        
        plt.ylabel('valores')
        plt.xlabel('ano 2000 a 2010')
        plt.grid(True)
        plt.title(u'Total de Professores por grau por ano')
        plt.show()

        t2 = time.clock()
        
        print 'tempo =', t2-t1
        print 'gráfico ok.'

    #-----------------------------------------------------------------
    #metodo para criar grafico 4
    #total de html tags
    #----------------------------------------------------------------- 
    def create_plot_file_html_search(self, data, data_label):

        print 'gráfico (total de html tags)...'
        print 'criando gráfico...'
        t1 = time.clock()

#"        try:
            #label_label = str(tipo_grau_list[ident])
        #print data
        #print data_label
        plt.plot(data, linewidth=1.0, marker='o', label=str(data_label))
        plt.xticks(range(len(data_label)), data_label)

        #atributos do grafico e da legenda
        pylab.savefig('grafico_4.png')        
        plt.ylabel('valores')
        plt.xlabel('html tags')
        plt.grid(True)
        plt.title(u'Quantidade de html tags numa página web')
        plt.show()

        t2 = time.clock()

        print 'tempo =', t2-t1
        print 'gráfico ok.'
##        pass





    #----------------------------------------------------------
    #CHAMADA DE FUNÇÃO
    #As funções funcionam ok. Erro apenas quado invocadas pelo main
    
    #estabelecimento = 'Ensino Superior Público Universitário'
    #create_plot_file_from_data_search_1('rebides.db')
    #create_plot_file_from_data_search_2(estabelecimento, 'rebides.db')
    #create_plot_file_from_data_search_3(estabelecimento, 'rebides.db')

